package data;

import java.util.Collections;

import javax.cache.Cache;
import javax.cache.CacheException;
import javax.cache.CacheManager;

import models.PageModel;

import com.googlecode.objectify.Key;
import com.googlecode.objectify.Objectify;
import com.googlecode.objectify.ObjectifyOpts;
import com.googlecode.objectify.ObjectifyService;

public class PageData {
	private Objectify ofy;
	
	private Cache cache = null;
	
	public PageData() {
		try {
			ObjectifyService.register(PageModel.class);
		} catch (Exception e) {
			//e.printStackTrace();
		}
		
		try {
            cache = CacheManager.getInstance().getCacheFactory().createCache(Collections.emptyMap());
        } catch (CacheException e) {
           //e.printStackTrace();
        }
		
        ObjectifyOpts opts = new ObjectifyOpts().setSessionCache(true);
		ofy = ObjectifyService.begin(opts);
	}
	
	private PageModel getConfig(String id) {
		PageModel page = new PageModel();
		if (cache != null && cache.containsKey(id)) {
			page = (PageModel) cache.get(id);
		} else {
			try {
				page = ofy.get(new Key<PageModel>(PageModel.class, id));
				cache.put(id, page);
			} catch (Exception e) {
				page = null;
			}
		}
		return page;
	}
	
	public PageModel getAboutUs() {
		PageModel page = getConfig("about-us");
		if (page == null) {
			page = new PageModel();
			page.setId("about-us");
		}
		return page;
	}
	
	public PageModel getPrivacyPolicy() {
		PageModel page = getConfig("privacy-policy");
		if (page == null) {
			page = new PageModel();
			page.setId("privacy-policy");
		}
		return page;
	}
	
	public PageModel getBuyingGuide() {
		PageModel page = getConfig("buying-guide");
		if (page == null) {
			page = new PageModel();
			page.setId("buying-guide");
		}
		return page;
	}
	
	public PageModel getDelivery() {
		PageModel page = getConfig("delivery");
		if (page == null) {
			page = new PageModel();
			page.setId("delivery");
		}
		return page;
	}
	
	public PageModel getPayments() {
		PageModel page = getConfig("payments");
		if (page == null) {
			page = new PageModel();
			page.setId("payments");
		}
		return page;
	}
	
	public PageModel getReturnsPolicy() {
		PageModel page = getConfig("returns-policy");
		if (page == null) {
			page = new PageModel();
			page.setId("returns-policy");
		}
		return page;
	}
	
	public PageModel getQuestionAnswer() {
		PageModel page = getConfig("question-answer");
		if (page == null) {
			page = new PageModel();
			page.setId("question-answer");
		}
		return page;
	}
	
	public PageModel getWhatIsGroupon() {
		PageModel page = getConfig("what-is-groupon");
		if (page == null) {
			page = new PageModel();
			page.setId("what-is-groupon");
		}
		return page;
	}
	
	public PageModel getBusinessCooperation() {
		PageModel page = getConfig("business-cooperation");
		if (page == null) {
			page = new PageModel();
			page.setId("business-cooperation");
		}
		return page;
	}
	
	public PageModel getContact() {
		PageModel page = getConfig("contact");
		if (page == null) {
			page = new PageModel();
			page.setId("contact");
		}
		return page;
	}
	
	public PageModel getRegulation() {
		PageModel page = getConfig("regulation");
		if (page == null) {
			page = new PageModel();
			page.setId("regulation");
		}
		return page;
	}
	
	public PageModel getRecruitment() {
		PageModel page = getConfig("recruitment");
		if (page == null) {
			page = new PageModel();
			page.setId("recruitment");
		}
		return page;
	}
}
